清单格式
每个应用程序包都应该包含一个名为 package.json
的清单文件,格式为 JSON。本文档将帮助您了解清单中每个字段的含义。
快速入门
以下是一个最小的清单
{ "main": "index.html", "name": "nw-demo" }
您只需要这两个字段即可开始使用 NW.js 应用。以下是它们的简要说明
main
: 告诉 NW.js 在启动时打开与package.json
相同文件夹中的index.html
name
: 为应用程序提供一个名为nw-demo
的唯一名称。
必填字段
每个包都必须在其包描述符文件中提供以下所有字段。
main
{String}
指定 NW.js 启动时应打开哪个 HTML 页面或执行哪个 JavaScript 文件。
您可以在此处指定一个 URL。您也可以只指定一个文件名(例如 index.html
或 script.js
)或路径(相对于您的 package.json
所在目录)。
name
{String}
包的名称。这必须是一个唯一的、小写的字母数字名称,不包含空格。它可以包含“.”、“_”或“-”字符。否则它是透明的。
name
应该在全局范围内是唯一的,因为 NW.js 会在名为 name
的目录下存储应用程序的数据。
功能控制字段
以下字段控制 NW.js 应该提供哪些功能以及 NW.js 应该如何打开主窗口。
product_string
{String}
使用它来 在 macOS 下重命名 Helper 应用程序。
nodejs
{Boolean}
将nodejs
设置为 false 将禁用 NW.js 中的 Node 支持。
node-main
{String}
指定 node.js 脚本文件的路径。它将在启动时在 Node 上下文中执行,在第一个 DOM 窗口加载之前。
domain
{String}
指定应用程序使用的 chrome-extension:// 协议 URL 中的主机。Web 引擎将在您的应用程序和同一域下的网站之间共享相同的 Cookie。
single-instance
已弃用
此属性自 0.13.0 起已弃用。请参阅 从 0.12 迁移到 0.13 的迁移说明。
{Boolean}
指定是否启动应用程序的单个实例。默认情况下设置为true
。
默认情况下,NW.js 只允许您的应用程序的一个实例。如果您想允许您的应用程序的多个实例同时运行,请将其设置为 false
。
bg-script
{String}
后台脚本。该脚本在应用程序启动时在后台页面中执行。
window
{Object}
控制窗口的外观,请参阅下面的 窗口子字段。
webkit
{Object}
控制 WebKit 的哪些功能应该开启/关闭,请参阅下面的 WebKit 子字段。
user-agent
{String}
覆盖应用程序发出的 HTTP 请求中的User-Agent
标头。
以下占位符可用于动态组合用户代理
%name
: 由清单中的name
字段替换。%ver
: 由清单中的version
字段替换(如果可用)。%nwver
: 由 NW.js 的版本替换。%webkit_ver
: 由 Blink 引擎的版本替换。%chromium_ver
: 由 Chromium 版本替换%osinfo
: 由您在浏览器用户代理字符串中看到的操作系统和 CPU 信息替换。
node-remote
行为已更改
此功能在 0.13.0 中已更改。请参阅 从 0.12 迁移到 0.13 的迁移说明。
{Array}
或{String}
启用在远程页面中调用 Node。该值控制应为哪些站点启用此功能。数组中的每个项目都遵循 Chrome 扩展程序中使用的 匹配模式。
匹配模式本质上是一个以允许的方案(http
、https
、file
或 ftp
)开头的 URL,并且可以包含 '*'
字符。特殊模式 <all_urls>
匹配以允许的方案开头的任何 URL。每个匹配模式都有 3 个部分
scheme
— 例如,http
或file
或*
host
— 例如,www.google.com
或*.google.com
或*
;如果方案是文件,则没有主机部分path
— 例如,/*
、/foo*
或/foo/bar
。路径必须存在于主机权限中,但始终被视为/*
。
以下是基本语法
<url-pattern> := <scheme>://<host><path> <scheme> := '*' | 'http' | 'https' | 'file' | 'ftp' <host> := '*' | '*.' <any char except '/' and '*'>+ <path> := '/' <any chars>
chromium-args
{String}
指定 chromium(内容外壳)命令行参数。
如果您想将应用程序与一些自定义 chromium 参数一起分发,这将很有用。例如,如果您想禁用 GPU 加速的视频显示,只需添加 "chromium-args" : "--disable-accelerated-video"
。如果您想添加多个参数,请用空格分隔每两个参数。此字段也可以在一个参数中包含多个标志,方法是将它们括在单引号中。
NW_PRE_ARGS
环境变量的值将附加到此字段的值之前。
有关更多信息,请参阅 命令行选项。
crash_report_url
{String}
崩溃报告服务器的 URL
应用程序崩溃后,崩溃转储文件和有关运行时环境的信息将发送到崩溃服务器。它以与 Chromium 浏览器相同的方式发送:一个带有 multipart/form-data
作为内容类型的 HTTP POST 请求。理论上,任何 breakpad/crashpad 服务器都可以处理该请求,因为 breakpad/crashpad 在 NW 中的工作方式与在 Chromium 中相同。请参阅 我们测试用例中使用的非常简单的服务器,或 simple-breakpad-server。
请求至少包含以下字段
prod
- 应用程序清单中的name
字段ver
- 应用程序清单中的version
字段upload_file_minidump
- 小内存转储文件的二进制内容switch-n
- 崩溃进程的命令行开关。每个开关都有多个字段,其中n
是从 1 开始的数字。
js-flags
{String}
指定传递给 JS 引擎 (v8) 的标志。例如,打开 Harmony 代理和集合功能
{ "name": "nw-demo", "main": "index.html", "js-flags": "--harmony_proxies --harmony_collections" }
可以在此处找到支持的 V8 标志列表:https://chromium.googlesource.com/v8/v8/+/master/src/flag-definitions.h
inject_js_start
inject_js_end
{String}
相对于应用程序路径的本地文件名,用于指定要注入到窗口的 JavaScript 文件。
inject_js_start
:注入的 JavaScript 代码将在任何来自 css 的文件之后执行,但在任何其他 DOM 被构建或任何其他脚本运行之前执行。
inject_js_end
:注入的 JavaScript 代码将在文档对象加载后执行,在 onload
事件触发之前执行。这主要用作 Window.open()
的选项,用于在新的窗口中注入 JS。
additional_trust_anchors
{Array}
包含一个 PEM 编码证书列表(例如"-----BEGIN CERTIFICATE-----\n...证书数据...\n-----END CERTIFICATE-----\n"
)。
这些证书用作验证的附加根证书,以允许连接到使用自签名证书或自定义 CA 颁发的证书的服务。
dom_storage_quota
{Integer}
DOM 存储配额的兆字节 (MB) 数。建议设置您想要的数值的两倍。
no-edit-menu (Mac)
已弃用
此属性自 0.13.0 起已弃用。请参阅 从 0.12 迁移到 0.13 的迁移说明。
{Boolean}
是否在 Mac OS X 上禁用默认的Edit
菜单。默认值为false
。仅在 Mac OS X 上有效。
窗口子字段
大多数窗口子字段默认情况下会由 window.open()
或链接(<a target="_blank">
)打开的子窗口继承。未继承的子字段例外列表如下。它们将被设置为打开窗口的默认值
fullscreen
->false
kiosk
->false
position
->null
resizable
->true
show
->true
所有窗口子字段都可以通过使用 new-win-policy
事件 覆盖。
id
{String}
用于标识窗口的id
。这将用于记住窗口的大小和位置,并在以后打开具有相同 id 的窗口时恢复该几何形状。 另请参阅 Chrome 应用文档
title
{String}
由 NW.js 创建的窗口的默认标题,如果您想在应用程序启动时显示自己的标题,它非常有用。
width
height
{Integer}
主窗口的初始内部宽度/高度。
toolbar
已弃用
此属性自 0.13.0 起已弃用。请参阅 从 0.12 迁移到 0.13 的迁移说明。
{Boolean}
是否显示导航工具栏。
icon
{String}
窗口图标的路径
position
{String}
为null
或center
或mouse
,控制窗口将放置的位置
min_width
min_height
{Integer}
窗口的最小内部宽度/高度
max_width
max_height
{Integer}
窗口的最大内部宽度/高度
as_desktop (Linux)
{Boolean}
在 X11 环境下显示为桌面背景窗口
resizable
{Boolean}
窗口是否可调整大小
注意,如果在 OS X 上将 resizable 设置为 false 并且 frame 设置为 true,用户仍然可以使窗口全屏。将 fullscreen 设置为 false 以禁用全屏控制。
always_on_top
行为已更改
此功能在 0.13.0 中已更改。请参阅 从 0.12 迁移到 0.13 的迁移说明。
{Boolean}
窗口是否应始终保持在其他窗口之上。
visible_on_all_workspaces (Mac & Linux)
行为已更改
此功能在 0.13.0 中已更改。请参阅 从 0.12 迁移到 0.13 的迁移说明。
{Boolean}
窗口是否应在所有工作区上同时可见(在支持多个工作区的平台上,目前为 Mac OS X 和 Linux)。
fullscreen
{Boolean}
窗口是否全屏
注意,如果 frame 也在 fullscreen 中设置为 false,它将阻止鼠标被捕获在屏幕的最边缘。如果 fullscreen 也设置为 true,您应该避免激活它。
show_in_taskbar
{Boolean}
窗口是否显示在任务栏或停靠栏中。默认值为true
。
frame
{Boolean}
将其指定为false
以使窗口无边框
注意,如果在全屏模式下将 frame 设置为 false,则会阻止鼠标捕获屏幕最边缘的区域。如果也设置了全屏模式,则应避免激活它。
无边框应用程序没有标题栏供用户点击并拖动窗口。您可以使用 CSS 将 DOM 元素指定为可拖动区域。
.drag-enable { -webkit-app-region: drag; } .drag-disable { -webkit-app-region: no-drag; }
show
{Boolean}
如果您希望应用程序在启动时隐藏,请将其指定为false
kiosk
{Boolean}
是否使用Kiosk
模式。在Kiosk
模式下,应用程序将全屏显示并尝试阻止用户离开应用程序,因此您应该记住在应用程序中提供一种离开Kiosk
模式的途径。此模式主要用于公共显示器上的演示
transparent
{Boolean}
是否开启透明窗口模式。默认值为false
。
使用 CSS 中的 rgba 背景值控制透明度。使用命令行选项 --disable-transparency
完全禁用此功能。
对透明区域的“点击穿透”有实验性支持:在命令行中添加 --disable-gpu
选项。
WebKit 子字段
double_tap_to_zoom_enabled
{Boolean}
使用 Mac 上双指双击启用缩放,默认值为 false。
plugin
{Boolean}
是否加载外部浏览器插件,如 Flash,默认值为 true。
其他字段
该 Packages/1.0 标准指定了 package.json
应提供的许多其他字段。目前我们没有使用它们,但您仍然可以提供它们。